package com.gopay.scheduler.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.joda.time.DateTime;

/**
 * @Title: DateUtils.java
 * @Package com.gopay.card.common.util
 * @Description: TODO()
 * @author HJY
 * @author KZ-TU
 * @date 2012-12-7 下午02:04:08
 * @version V1.0
 */
public class DateUtils {
    /** 时间格式：yyyyMMddHHmmss'. */
    public static String yyyyMMddHHmmss = "yyyyMMddHHmmss";

    /** 时间格式：yyyyMMdd'. */
    public static String yyyyMMdd = "yyyyMMdd";

    /** 时间格式：yyyy-MM-dd'. */
    public static String yyyy_MM_dd = "yyyy-MM-dd";

    /** 时间格式：HH:mm:ss'. */
    public static String HH_mm_ss = "HH:mm:ss";
    
    /** 时间格式：yyyy-MM-dd' 'HH:mm:ss'. */
    public static String yyyy_MM_dd_HH_mm_ss = "yyyy-MM-dd' 'HH:mm:ss";

    /** 时间格式：yyyy-MM-dd' 'HH:mm'. */
    public static String yyyy_MM_dd_HH_mm = "yyyy-MM-dd' 'HH:mm";

    public static String formatDate(Date date) {
        if (date == null)
            return "";
        return new SimpleDateFormat(yyyy_MM_dd_HH_mm_ss).format(date);
    }
    
    public static String formatDate(Date date, String patten) {
        if (date == null)
            return "";
        return new SimpleDateFormat(patten).format(date);
    }
    /**
     * 获取系统当前时间
     * 
     * @return
     */
    public static Date getSystemDate() {
        long d = System.currentTimeMillis();
        Date date = new Date(d);

        return date;
    }
    /**
     * 获取当前时间
     * 
     * @param pattern
     *            格式
     * @return
     */
    public static String getCurrDate(String pattern) {
        long d = System.currentTimeMillis();
        Date date = new Date(d);

        return format(date, pattern);
    }
    
    /**
     * 日期格式化
     * 
     * @param date
     *            日期
     * @param pattern
     *            格式
     * @return
     */
    public static String format(Date date, String pattern) {
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.format(date);
    }
    /**
     * <p>
     * 将一个日期字符串转换为日期类型对象（格式化日期字符串）
     * </p>
     * 
     * @param date
     *            日期字符串
     * @param dateFormat
     *            给定日期字符串的日期格式
     * @return
     * @throws ParseException
     */
    public static Date formatString(String date, String dateFormat) {
        if (date == null || date.length() <= 0) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        Date rs = null;
        try {
            rs = sdf.parse(date);
            return rs;
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }
    
    public static Date add(Date date, int field, int amount) {
        if (date == null)
            return null;
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(field, amount);
        return c.getTime();
    }

    /**
     * 添加年
     * 
     * @param curDate
     *            当前日期
     * @param val
     *            添加年数 如果为负值，则为减
     * @return
     */
    public static Date plusYears(Date curDate, int val) {
        DateTime dt = new DateTime(curDate.getTime());
        dt = dt.plusYears(val);
        return dt.toDate();
    }

    /**
     * 添加月
     * 
     * @param curDate
     *            当前日期
     * @param val
     *            添加月数 如果为负值，则为减
     * @return
     */
    public static Date plusMonths(Date curDate, int val) {
        DateTime dt = new DateTime(curDate.getTime());
        dt = dt.plusMonths(val);
        return dt.toDate();
    }

    /**
     * 添加天
     * 
     * @param curDate
     *            当前日期
     * @param val
     *            添加天数 如果为负值，则为减
     * @return
     */
    public static Date plusDays(Date curDate, int val) {
        DateTime dt = new DateTime(curDate.getTime());
        dt = dt.plusDays(val);
        return dt.toDate();
    }

    /**
     * 添加小时
     * 
     * @param curDate
     *            当前日期
     * @param val
     *            添加小时数 如果为负值，则为减
     * @return
     */
    public static Date plusHours(Date curDate, int val) {
        DateTime dt = new DateTime(curDate.getTime());
        dt = dt.plusHours(val);
        return dt.toDate();
    }

    /**
     * 添加分钟
     * 
     * @param curDate
     *            当前日期
     * @param val
     *            添加分钟数 如果为负值，则为减
     * @return
     */
    public static Date plusMinutes(Date curDate, int val) {
        DateTime dt = new DateTime(curDate.getTime());
        dt = dt.plusMinutes(val);
        return dt.toDate();
    }

    /**
     * 时间字符串转对象
     * 
     * @param aMask
     *            模式
     * @param strDate
     *            时间
     * @return
     */
    public static final Date convertDate(String patten, String strDate) {
        SimpleDateFormat df = null;
        Date date = null;
        df = new SimpleDateFormat(patten);
        try {
            date = df.parse(strDate);
        } catch (ParseException pe) {
            throw new RuntimeException(pe);
        }
        return date;
    }
    /**
     * 日期转换格式
     * 			
     * @param targetPatten
     * @param originalPatten
     * @param date
     * @return
     * 				条件不正确返回空
     * @throws ParseException 
     */
    public static String convertStringDateToStringDate(String targetPatten,String originalPatten,String date) throws ParseException{
    	if (date == null || date.length() <= 0||targetPatten ==null ||originalPatten == null) {
            return "";
        }
    	SimpleDateFormat sdf = new SimpleDateFormat(targetPatten);
		SimpleDateFormat sdf1 = new SimpleDateFormat(originalPatten);
		String today= "";
		today = sdf.format(sdf1.parse(date));
		return today;
    }
    /**
     * 日期转换格式
     * 			如：
     * @param targetPatten
     * @param originalPatten
     * @param date
     * @return
     * @throws ParseException
     */
    public static String convertDateToStringDate(String targetPatten,Date date) throws ParseException{
    	if (date == null ||targetPatten ==null ) {
    		return "";
    	}
    	SimpleDateFormat sdf = new SimpleDateFormat(targetPatten);
    	String today= "";
    	today = sdf.format(date);
    	return today;
    }
    /**
     * 获取时间结果集
     * @param dBegin
     * @param dEnd
     * @return
     */
    public static List<Date> getDates(Date dBegin, Date dEnd)
	 {
	  List lDate = new ArrayList();
	  lDate.add(dBegin);
	  Calendar calBegin = Calendar.getInstance();
	  // 使用给定的 Date 设置此 Calendar 的时间
	  calBegin.setTime(dBegin);
	  Calendar calEnd = Calendar.getInstance();
	  // 使用给定的 Date 设置此 Calendar 的时间
	  calEnd.setTime(dEnd);
	  // 测试此日期是否在指定日期之后
	  while (dEnd.after(calBegin.getTime()))
	  {
	   // 根据日历的规则，为给定的日历字段添加或减去指定的时间量
	   calBegin.add(Calendar.DAY_OF_MONTH, 1);
	   lDate.add(calBegin.getTime());
	  }
	  return lDate;
	 }
    public static void main(String[] args) {
    	SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
    	SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    	Date plusDays = plusDays(new Date(), 1);
    	String date=sdf1.format(plusDays);
//		System.out.println(date);
		try {
			System.out.println(sdf.format(plusDays));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
